package thread;
/** 守护线程
 * 守护线程是通过用户线程调用setDaemon(true)设置而来的
 * 我们创建的线程默认都是用户线程
 *
 *
 * 它们的区别主要体现在进程结束时当一个进程中的所有的用户线程都结束时，进程就会结束，此时会强行杀死所有还在运行的守护线程
 *
 * */
public class DaemonThreadDemo {
    public static void main(String[] args) {
          Thread rose = new Thread(){
              public  void run(){
                  for(int i=0;i<5;i++){
                      System.out.println("rose:let,me go!");
                      try {
                          Thread.sleep(1000);
                      } catch (InterruptedException e) {
                      }
                  }
                  System.out.println("rose:aaaa");
                  System.out.println("rose:噗通");
              }
          };
          Thread jack= new Thread() {
              public void run() {
                  while (true) {
                      System.out.println("jack:I love you!");

                      try {
                          Thread.sleep(1000);
                      } catch (InterruptedException e) {
                          throw new RuntimeException(e);
                      }
                  }
              }
          };
           rose.start();//给调度器提示    main方法执行完 主线程就会结束
           jack.setDaemon( true);
           jack.start();
           //while(true) 主线程死循环  Jack就不会被杀死
           //守护线程一般是用户线程全部执行完以后才会被杀死
           // 如果主进程不结束，进程中还有用户线程活着，就不会结束，此时就不会杀死守护线程
           // 并发安全问题是可能存在的
    }
}









